import javax.swing.JFrame;


public class CPU {

	public Memoria memoria;
	public MUX mux;
	public MUXA muxa;
	public MUXB muxb;
	public PC pc; 
	public R0 r0;
	public R1 r1;
	public R2 r2;
	public R3 r3;
	public R4 r4;
	public RGhost rghost;
	public RDados rdados;
	public REnd rend;
	public UC uc;
	public IR ir;
	public ULA ula;
	
	public CPU()
	{
		reset();
	}
	
	public void reset()
	{
		muxa = new MUXA();
		muxb = new MUXB();

		uc = new UC(this);
		ula = new ULA(uc, muxa, muxb);

		r0 = new R0(uc, ula);
		r1 = new R1(uc, ula);
		r2 = new R2(uc, ula);
		r3 = new R3(uc, ula);
		r4 = new R4(uc, ula);
		rghost = new RGhost(uc, ula);
		ir = new IR(uc, ula);
		rend = new REnd(uc, ula);
		pc = new PC(uc, ula); 

		memoria = new Memoria(uc, rend);
		mux = new MUX(uc, memoria, ula);
		rdados = new RDados(uc, mux);
		
		muxa.uc = uc;
		muxa.rdados = rdados;
		muxa.r0 = r0;
		muxa.r1 = r1;
		muxa.r2 = r2;

		muxb.uc = uc;
		muxb.pc = pc;
		muxb.r3 = r3;
		muxb.r4 = r4;
		muxb.rghost = rghost;
		
		uc.setULA(ula);
		uc.setIR(ir);
		memoria.setRDados(rdados);
	}
	
	/*
	public void atualizarValores()
	{
		muxa.atualizarValor();
		mux.atualizarValor();
		pc.atualizarValor(); 
		r0.atualizarValor();
		r1.atualizarValor();
		r2.atualizarValor();
		r3.atualizarValor();
		r4.atualizarValor();
		rghost.atualizarValor();
		rdados.atualizarValor();
		rend.atualizarValor();
		ir.atualizarValor();
		muxb.atualizarValor();
		ula.atualizarValor();
		uc.atualizarValor();
		memoria.atualizarValor();
	}
	*/
	
	public void atualizarValoresT1()
	{
		muxa.atualizarValor();
		mux.atualizarValor();
		muxb.atualizarValor();
		ula.atualizarValor();
		//uc.atualizarValor();
		memoria.atualizarValor();
	}

	public void atualizarValoresT3()
	{
		pc.atualizarValor(); 
		r0.atualizarValor();
		r1.atualizarValor();
		r2.atualizarValor();
		r3.atualizarValor();
		r4.atualizarValor();
		rghost.atualizarValor();
		rdados.atualizarValor();
		rend.atualizarValor();
		ir.atualizarValor();
	}

	public UC getUC() { return uc; }
	
}
